package com.CST.config;

import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.*;
import org.springframework.context.annotation.*;
import org.springframework.data.redis.connection.*;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.serializer.*;

/**
 * @author cc
 * @since 2020-01-13
 */
@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(
	  RedisConnectionFactory redisConnectionFactory) {
	  RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
	  redisTemplate.setConnectionFactory(redisConnectionFactory);

	  // 使用Jackson2JsonRedisSerialize 替换默认序列化
	  @SuppressWarnings("rawtypes")
	  Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(
		Object.class);

	  ObjectMapper objectMapper = new ObjectMapper();
	  objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
	  objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

	  jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

	  // 设置value的序列化规则和 key的序列化规则
	  redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
	  redisTemplate.setKeySerializer(new StringRedisSerializer());
	  redisTemplate.afterPropertiesSet();
	  return redisTemplate;
    }
}
